package com.example.servicechat.exception;



import com.example.entity.enums.ResponseCodeEnum;
import com.example.entity.vo.ResponseVO;
import com.example.servicechat.controller.ABaseController;
import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import org.springframework.web.servlet.NoHandlerFoundException;

import static com.example.entity.enums.ResponseCodeEnum.CODE_500;


//全局异常处理
@RestControllerAdvice
public class AGlobalExceptionHandler extends ABaseController {

    private static final Logger logger = LoggerFactory.getLogger(AGlobalExceptionHandler.class);

//    算数异常处理
    @ExceptionHandler(ArithmeticException.class)
    public ResponseVO arithmeticException(ArithmeticException e) {
//        自定义处理
        return getBusinessErrorResponseVO(e);
    }

    //    全局父异常处理
    @ExceptionHandler(Exception.class)
    public ResponseVO Exception(Exception e) {
//        自定义处理
        return getBusinessErrorResponseVO(e);
    }
//    @ExceptionHandler(value = Exception.class)
//    Object handleException(Exception e, HttpServletRequest request) {
//        logger.error("请求错误，请求地址{},错误信息:", request.getRequestURL(), e);
//        ResponseVO ajaxResponse = new ResponseVO();
//        //404
//        if (e instanceof NoHandlerFoundException) {
//            ajaxResponse.setCode(ResponseCodeEnum.CODE_404.getCode());
//            ajaxResponse.setInfo(ResponseCodeEnum.CODE_404.getMsg());
//            ajaxResponse.setStatus(STATUC_ERROR);
//        } else if (e instanceof BusinessException) {
//            //业务错误
//            BusinessException biz = (BusinessException) e;
//            ajaxResponse.setCode(biz.getCode() == null ? ResponseCodeEnum.CODE_600.getCode() : biz.getCode());
//            ajaxResponse.setInfo(biz.getMessage());
//            ajaxResponse.setStatus(STATUC_ERROR);
//        } else if (e instanceof BindException|| e instanceof MethodArgumentTypeMismatchException) {
//            //参数类型错误
//            ajaxResponse.setCode(ResponseCodeEnum.CODE_600.getCode());
//            ajaxResponse.setInfo(ResponseCodeEnum.CODE_600.getMsg());
//            ajaxResponse.setStatus(STATUC_ERROR);
//        } else if (e instanceof DuplicateKeyException) {
//            //主键冲突
//            ajaxResponse.setCode(ResponseCodeEnum.CODE_601.getCode());
//            ajaxResponse.setInfo(ResponseCodeEnum.CODE_601.getMsg());
//            ajaxResponse.setStatus(STATUC_ERROR);
//        } else {
//            ajaxResponse.setCode(ResponseCodeEnum.CODE_500.getCode());
//            ajaxResponse.setInfo(ResponseCodeEnum.CODE_500.getMsg());
//            ajaxResponse.setStatus(STATUC_ERROR);
//        }
//        return ajaxResponse;
//    }
}
